GSList *cells;
guint popup_in_progress : 1;
+ guint popup_shown : 1;
guint destroying : 1;
guint add_tearoffs : 1;
guint has_frame : 1;
enum {
CHANGED,
- POPUP_SHOW,
- POPUP_HIDE,
LAST_SIGNAL
};
PROP_ADD_TEAROFFS,
PROP_TEAROFF_TITLE,
PROP_HAS_FRAME,
- PROP_FOCUS_ON_CLICK
+ PROP_FOCUS_ON_CLICK,
+ PROP_POPUP_SHOWN
};
static GtkBinClass *parent_class = NULL;
GtkTreeIter *iter,
gpointer data);
static void gtk_combo_box_child_show (GtkWidget *widget,
- gpointer user_data);
+ GtkComboBox *combo_box);
static void gtk_combo_box_child_hide (GtkWidget *widget,
- gpointer user_data);
+ GtkComboBox *combo_box);
/* GtkCellEditable method implementations */
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- combo_box_signals[POPUP_SHOW] =
- g_signal_new ("popup-show",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- combo_box_signals[POPUP_HIDE] =
- g_signal_new ("popup-hide",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
-
/* properties */
/**
* GtkComboBox:model:
GTK_PARAM_READWRITE));
+ /**
+ * GtkComboBox:popup-shown:
+ *
+ * Whether the combo boxes dropdown is popped up.
+ * Note that this property is mainly useful, because
+ * it allows you to connect to notify::popup-shown.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property (object_class,
+ PROP_POPUP_SHOWN,
+ g_param_spec_boolean ("popup-shown",
+ P_("Popup shown"),
+ P_("Whether the combo's dropdown is shown"),
+ FALSE,
+ GTK_PARAM_READABLE));
+
gtk_widget_class_install_style_property (widget_class,
g_param_spec_boolean ("appears-as-list",
P_("Appears as list"),
combo_box->priv->col_column = -1;
combo_box->priv->row_column = -1;
+ combo_box->priv->popup_shown = FALSE;
combo_box->priv->add_tearoffs = FALSE;
combo_box->priv->has_frame = TRUE;
combo_box->priv->is_cell_renderer = FALSE;
gtk_combo_box_set_title (combo_box, g_value_get_string (value));
break;
+ case PROP_POPUP_SHOWN:
+ if (g_value_get_boolean (value))
+ {
+ gtk_combo_box_popup (combo_box);
+ }
+ else
+ {
+ gtk_combo_box_popdown (combo_box);
+ }
+ break;
+
default:
break;
}
g_value_set_string (value, gtk_combo_box_get_title (combo_box));
break;
+ case PROP_POPUP_SHOWN:
+ g_value_set_boolean (value, combo_box->priv->popup_shown);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
static void
gtk_combo_box_child_show (GtkWidget *widget,
- gpointer user_data)
+ GtkComboBox *combo_box)
{
- GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
- g_signal_emit (combo_box, combo_box_signals[POPUP_SHOW], 0);
+ GtkComboBoxPrivate *priv = combo_box->priv;
+
+ priv->popup_shown = TRUE;
+ g_object_notify (G_OBJECT (combo_box), "popup-shown");
}
static void
gtk_combo_box_child_hide (GtkWidget *widget,
- gpointer user_data)
+ GtkComboBox *combo_box)
{
- GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
- g_signal_emit (combo_box, combo_box_signals[POPUP_HIDE], 0);
+ GtkComboBoxPrivate *priv = combo_box->priv;
+
+ priv->popup_shown = FALSE;
+ g_object_notify (G_OBJECT (combo_box), "popup-shown");
}
static gboolean